/****************************************************************************
**
** Copyright (C) 2010 Andriy Kovalchuk, Vyacheslav Levytskyy,
** Igor Samolyuk, Valentyn Yanchuk (aka "Hermitech Laboratory")
**
** All rights reserved.
** Contact: Hermitech Laboratory (info@mmlsoft.com)
**
** This file is a part of the Formulator MathML Editor project
** (http://www.mmlsoft.com).
**
** Commercial Usage
** Licensees holding valid Formulator Commercial licenses may use this 
** file in accordance with the Formulator Commercial License Agreement 
** provided with the Software or, alternatively, in accordance with the 
** terms contained in a written agreement between you and 
** Hermitech Laboratory.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3.0 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.  Please review the following information to
** ensure the GNU General Public License version 3.0 requirements will be
** met: http://www.gnu.org/copyleft/gpl.html.
**
** If you have questions regarding the use of this file, please contact
** Hermitech Laboratory at info@mmlsoft.com.
**
****************************************************************************/

#include "ast.h"
#include "parser.h"

///////////////////////////////////////////////////////////////////////////////

static unsigned char bulan_lrt_table[] = {
0x43, 0x43, 0x20, 0x4C, 0x65, 0x76, 0x69, 0x74, 0x73, 0x6B, 0x79, 0x00, 0x33, 0x00, 0x13, 0x00, 
0x0F, 0x00, 0x07, 0x00, 0x63, 0x97, 0x01, 0x00, 0x02, 0x00, 0x02, 0x00, 0x03, 0x00, 0x03, 0x00, 
0x04, 0x00, 0x04, 0x00, 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, 0x06, 0x00, 0x07, 0x00, 0x07, 0x00, 
0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x01, 0x00, 0x02, 0x00, 
0x01, 0x00, 0x06, 0x00, 0x04, 0x00, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, 
0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x03, 0x00, 0x04, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 
0x03, 0x00, 0x00, 0x00, 0x02, 0x80, 0x04, 0x80, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x05, 0x80, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x03, 0x80, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x05, 0x80, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x01, 0xC0, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x02, 0xC0, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x02, 0xC0, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x03, 0xC0, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x03, 0xC0, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x0B, 0x80, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x06, 0x80, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x07, 0x80, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x08, 0x80, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x09, 0x80, 0x0E, 0x80, 
0x11, 0x80, 0x16, 0x80, 0x18, 0x80, 0x17, 0x80, 0x1B, 0x80, 0x1F, 0x80, 0x25, 0x80, 0x2B, 0x80, 
0x00, 0x40, 0x14, 0x80, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x31, 0x80, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x0F, 0x80, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x0A, 0x80, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x04, 0xC0, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x04, 0xC0, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x0C, 0x80, 0x0E, 0x80, 0x11, 0x80, 0x16, 0x80, 0x18, 0x80, 0x17, 0x80, 0x1B, 0x80, 0x1F, 0x80, 
0x25, 0x80, 0x2B, 0x80, 0x00, 0x40, 0x14, 0x80, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x31, 0x80, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x0F, 0x80, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x0D, 0x80, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x05, 0xC0, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x05, 0xC0, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x06, 0xC0, 0x12, 0x80, 0x06, 0xC0, 
0x00, 0x40, 0x00, 0x40, 0x06, 0xC0, 0x06, 0xC0, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x10, 0x80, 0x11, 0x80, 0x16, 0x80, 0x18, 0x80, 0x17, 0x80, 0x1B, 0x80, 0x1F, 0x80, 
0x25, 0x80, 0x2B, 0x80, 0x00, 0x40, 0x14, 0x80, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x31, 0x80, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x07, 0xC0, 0x12, 0x80, 0x07, 0xC0, 0x00, 0x40, 0x00, 0x40, 0x07, 0xC0, 0x07, 0xC0, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x08, 0xC0, 
0x08, 0xC0, 0x08, 0xC0, 0x00, 0x40, 0x00, 0x40, 0x08, 0xC0, 0x08, 0xC0, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x13, 0x80, 0x16, 0x80, 0x18, 0x80, 0x17, 0x80, 
0x1B, 0x80, 0x1F, 0x80, 0x25, 0x80, 0x2B, 0x80, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x31, 0x80, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x09, 0xC0, 0x09, 0xC0, 0x09, 0xC0, 0x00, 0x40, 0x00, 0x40, 
0x09, 0xC0, 0x09, 0xC0, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x15, 0x80, 
0x11, 0x80, 0x16, 0x80, 0x18, 0x80, 0x17, 0x80, 0x1B, 0x80, 0x1F, 0x80, 0x25, 0x80, 0x2B, 0x80, 
0x00, 0x40, 0x14, 0x80, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x31, 0x80, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x0A, 0xC0, 
0x12, 0x80, 0x0A, 0xC0, 0x00, 0x40, 0x00, 0x40, 0x0A, 0xC0, 0x0A, 0xC0, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x0B, 0xC0, 0x0B, 0xC0, 0x0B, 0xC0, 
0x00, 0x40, 0x00, 0x40, 0x0B, 0xC0, 0x0B, 0xC0, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x0C, 0xC0, 0x0C, 0xC0, 0x0C, 0xC0, 0x00, 0x40, 0x00, 0x40, 
0x0C, 0xC0, 0x0C, 0xC0, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x0D, 0xC0, 0x0D, 0xC0, 0x0D, 0xC0, 0x19, 0x80, 0x00, 0x40, 0x0D, 0xC0, 0x0D, 0xC0, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x1A, 0x80, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x0E, 0xC0, 0x0E, 0xC0, 0x0E, 0xC0, 
0x00, 0x40, 0x00, 0x40, 0x0E, 0xC0, 0x0E, 0xC0, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x1C, 0x80, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x1D, 0x80, 0x0E, 0x80, 
0x11, 0x80, 0x16, 0x80, 0x18, 0x80, 0x17, 0x80, 0x1B, 0x80, 0x1F, 0x80, 0x25, 0x80, 0x2B, 0x80, 
0x00, 0x40, 0x14, 0x80, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x31, 0x80, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x0F, 0x80, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x1E, 0x80, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x0F, 0xC0, 0x0F, 0xC0, 0x0F, 0xC0, 
0x00, 0x40, 0x00, 0x40, 0x0F, 0xC0, 0x0F, 0xC0, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x20, 0x80, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x21, 0x80, 0x0E, 0x80, 
0x11, 0x80, 0x16, 0x80, 0x18, 0x80, 0x17, 0x80, 0x1B, 0x80, 0x1F, 0x80, 0x25, 0x80, 0x2B, 0x80, 
0x00, 0x40, 0x14, 0x80, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x31, 0x80, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x0F, 0x80, 
0x00, 0x40, 0x22, 0x80, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x23, 0x80, 0x0E, 0x80, 0x11, 0x80, 0x16, 0x80, 0x18, 0x80, 0x17, 0x80, 
0x1B, 0x80, 0x1F, 0x80, 0x25, 0x80, 0x2B, 0x80, 0x00, 0x40, 0x14, 0x80, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x31, 0x80, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x0F, 0x80, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x24, 0x80, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x10, 0xC0, 0x10, 0xC0, 0x10, 0xC0, 0x00, 0x40, 0x00, 0x40, 0x10, 0xC0, 0x10, 0xC0, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x26, 0x80, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x27, 0x80, 0x0E, 0x80, 0x11, 0x80, 0x16, 0x80, 0x18, 0x80, 0x17, 0x80, 
0x1B, 0x80, 0x1F, 0x80, 0x25, 0x80, 0x2B, 0x80, 0x00, 0x40, 0x14, 0x80, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x31, 0x80, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x0F, 0x80, 0x00, 0x40, 0x28, 0x80, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x29, 0x80, 0x0E, 0x80, 
0x11, 0x80, 0x16, 0x80, 0x18, 0x80, 0x17, 0x80, 0x1B, 0x80, 0x1F, 0x80, 0x25, 0x80, 0x2B, 0x80, 
0x00, 0x40, 0x14, 0x80, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x31, 0x80, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x0F, 0x80, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x2A, 0x80, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x11, 0xC0, 0x11, 0xC0, 0x11, 0xC0, 
0x00, 0x40, 0x00, 0x40, 0x11, 0xC0, 0x11, 0xC0, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x2C, 0x80, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x2D, 0x80, 0x0E, 0x80, 
0x11, 0x80, 0x16, 0x80, 0x18, 0x80, 0x17, 0x80, 0x1B, 0x80, 0x1F, 0x80, 0x25, 0x80, 0x2B, 0x80, 
0x00, 0x40, 0x14, 0x80, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x31, 0x80, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x0F, 0x80, 
0x00, 0x40, 0x2E, 0x80, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x2F, 0x80, 0x0E, 0x80, 0x11, 0x80, 0x16, 0x80, 0x18, 0x80, 0x17, 0x80, 
0x1B, 0x80, 0x1F, 0x80, 0x25, 0x80, 0x2B, 0x80, 0x00, 0x40, 0x14, 0x80, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x31, 0x80, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x0F, 0x80, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x30, 0x80, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x12, 0xC0, 0x12, 0xC0, 0x12, 0xC0, 0x00, 0x40, 0x00, 0x40, 0x12, 0xC0, 0x12, 0xC0, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x32, 0x80, 0x0E, 0x80, 0x11, 0x80, 0x16, 0x80, 
0x18, 0x80, 0x17, 0x80, 0x1B, 0x80, 0x1F, 0x80, 0x25, 0x80, 0x2B, 0x80, 0x00, 0x40, 0x14, 0x80, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x31, 0x80, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x0F, 0x80, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x33, 0x80, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 
0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x13, 0xC0, 0x13, 0xC0, 0x13, 0xC0, 0x00, 0x40, 0x00, 0x40, 
0x13, 0xC0, 0x13, 0xC0, 0x00, 0x40
};

///////////////////////////////////////////////////////////////////////////////

void _TreateMessages( BulanParser*& parser, DRMessageManager& dmm, long message_page )
{
	const std::vector<HKLineMessage>& eTbl = parser->GetErrorTable();
	const std::vector<HKLineMessage>& wTbl = parser->GetWarningTable();
	long i;
	for( i = 0; i < (long) eTbl.size(); i++ )
	{
		if( eTbl[ i ].line )
			dmm.AddLine( message_page, eTbl[ i ].text, eTbl[ i ].line );
		else
			dmm.AddLine( message_page, eTbl[ i ].text );
	}
	for( i = 0; i < (long) wTbl.size(); i++ )
	{
		if( wTbl[ i ].line )
			dmm.AddLine( message_page, wTbl[ i ].text, wTbl[ i ].line );
		else
			dmm.AddLine( message_page, wTbl[ i ].text );
	}
}

int _TryCompileBulan( const QString& text, PiCodeASTStorage*& bms, BulanParser*& parser, DRMessageManager& /*dmm*/, long /*message_page*/ )
{
	int ret = 0;
	Source srcV(text);
	parser = new BulanParser( srcV, ::createActionT( (LRTDATA*)bulan_lrt_table ), &bms );
	try
	{
		parser->Make();
		if( parser->IsError() ) ret = -1;
	}
	catch( QString errMsg )
	{
		parser->SetError( errMsg );
		ret = -1;
	}
	if( ret != 0 && bms )
	{
		delete bms;
		bms = 0;
	}
	return ret;
}

int LS_CompileBulanExpr( const QString& _txt, PiCodeASTStorage*& bms, DRMessageManager& dmm, long message_page )
{
	int ret;
	BulanParser *parser = 0;
	ret = ::_TryCompileBulan( _txt, bms, parser, dmm, message_page );
	if( parser )
	{
		::_TreateMessages( parser, dmm, message_page );
		delete parser;
	}
	return ret;
}

///////////////////////////////////////////////////////////////////////////////
